#pragma once
#include "SearchCommons.h"

class GraphSearch
{
protected:
	Graph* g;
	virtual void performSearch(node* start, node* goal, Grapher* gr=NULL, bool penalized=false, int maxExpandVectors=-1) = 0;
	virtual const char* getFileName() = 0;
public:
	GraphSearch(void);
	virtual ~GraphSearch(void);

	void displaySearch(Graph & g, 
					   Vector2 start, 
					   Vector2 goal, 
					   Grapher & gr, 
					   bool penalized=false, 
					   int maxDisplayVectors=-1,
					   bool unset = false,
					   std::string filename = "",
					   Vector2 x=Vector2(-200, 200), 
					   Vector2 y=Vector2(-200,200),
					   int maxExpandVectors=-1);
	node* search(Graph* g, Vector2 start, Vector2 goal, bool penalized=false);
};

